﻿#include <iostream>

using namespace std;

/* C++设计模式之适配器模式(Adapter Pattern)
 * 作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式，它结合了两个独立接口的功能。
 * 例子：读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器，再将读卡器插入笔记本，这样就可以通过笔记本来读取内存卡。
 */


// target
class Robot {
public:
    Robot() = default;

    virtual~Robot() = default;

    virtual void cry() = 0;

    virtual void move() = 0;
};


//adaptee
class Dog {
public:
    Dog() = default;

    ~Dog() = default;

    void wang() {
        std::cout << "狗汪汪叫!" << std::endl;
    }

    void run() {
        std::cout << "狗快快跑!" << std::endl;
    }
};

//adapter类DogAdapter
class DogAdapter : public Robot, private Dog {
public:
    void cry() {
        std::cout << "机器人模仿：" << std::endl;
        Dog::wang();
    }

    void move() {
        std::cout << "机器人模仿：" << std::endl;
        Dog::run();
    }
};

int main() {
    std::shared_ptr<Robot> robot = std::make_shared<DogAdapter>();
    robot->cry();
    robot->move();
    return 0;

}
